package com.sailfish.springbootdemo.utils;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.sailfish.springbootdemo.pojo.JwtHeaderInfo;
import com.sailfish.springbootdemo.pojo.JwtProperties;

public class JwtUtils {

    public static JwtHeaderInfo verifyHeader(String authorizationHeader) {
        //@Value失效的四种原因：
        //1.不能作用于静态变量；
        //2.不能作用于常量;
        //3.不能在非注册的类中使用；
        //4.使用这个类时，只能通过依赖注入的方式，用new的方式是不会自动注入这些配置的。
        //所以这里封装一个 JwtProperties 来获取
        String sign = JwtProperties.SIGN;
        String token = authorizationHeader.substring("Bearer ".length());
        JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(sign)).build();
        //验证JWT
        DecodedJWT decodedJWT = jwtVerifier.verify(token);

        String userId = decodedJWT.getClaim("userId").asString();
        String password = decodedJWT.getClaim("password").asString();
        String userName = decodedJWT.getClaim("userName").asString();
        String role = decodedJWT.getClaim("role").asString();

        JwtHeaderInfo jwtHeaderInfo = new JwtHeaderInfo();
        jwtHeaderInfo.setUserId(Integer.parseInt(userId));
        jwtHeaderInfo.setPassword(password);
        jwtHeaderInfo.setUserName(userName);
        jwtHeaderInfo.setRole(role);
        return jwtHeaderInfo;
    }
}
